/**
 * Clase PTableModel.
 * Utilizada originalmente en el Taller 3 del curso
 * ISIS-253 periodo 2003-1 (Proyecto PASYS) - Universidad de los Andes.
 * Realizada por Carlos Diaz Maya con ayuda del API de Java.
 * Parte del codigo de esta clase fue obtenido del tutorial de Java
 * http://java.sun.com
 * @version 2.0 Adaptado para el proyecto 1 de Sistemas Distribuidos - 2012-I
 */
package proy1sistdistribuidos.interfaz;

import java.util.ArrayList;
import java.util.Collection;

import javax.swing.table.AbstractTableModel;

class PTableModel extends AbstractTableModel {
    /**
     * @associates String
     */
    final ArrayList columnNames = new ArrayList();

    /**
     * @associates ArrayList
     */
    final ArrayList data = new ArrayList();

    public PTableModel() {
    }

    public PTableModel(ArrayList columns) {
        for (int i = 0; i < columns.size(); i++) {
            columnNames.add(
                "<html><font color=\"#000000\"><u>"
                    + (String) columns.get(i)
                    + "</u></font></html>");
        }
    }

    public int getColumnCount() {
        return columnNames.size();
    }

    public int getRowCount() {
        return data.size();
    }

    public ArrayList getData() {
        return data;
    }

    public String getColumnName(int col) {
        return (String) columnNames.get(col);
    }

    public Object getValueAt(int row, int col) {
        return ((ArrayList) data.get(row)).get(col);
    }

    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }

    public boolean isCellEditable(int row, int col) {
        return false;
    }

    public void setValueAt(Object value, int row, int col) {
        ((ArrayList) data.get(row)).set(col, value);
        fireTableCellUpdated(row, col);
    }

    public ArrayList getRowAt(int row) {
        return ((ArrayList) data.get(row));
    }

    public void setData(ArrayList rows) {
        clear();
        data.addAll((Collection) rows);
        fireTableRowsInserted(0, getRowCount() - 1);
    }

    public void addRow(ArrayList elem) {
        addRow(getRowCount(), elem);
    }

    public void addRow(int row, ArrayList elem) {
        data.add(row, elem);
        fireTableRowsInserted(row, row);
    }

    public void modifyRow(int row, ArrayList elem) {
        data.set(row, elem);
        fireTableRowsUpdated(row, row);
    }

    public void deleteRow(int row) {
        data.remove(row);
        fireTableRowsDeleted(row, row);
    }

    public void clear() {
        int tam = getRowCount();
        if (tam > 0) {
            data.clear();
            fireTableRowsDeleted(0, tam - 1);
        }
    }

}